<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1020244
-->
<head>
  <meta charset="utf-8">
  <title>Test for Bug 1020244 - Test the chrome-only AnonymousContent API</title>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1020244">Mozilla Bug 1020244</a>
  <script type="application/javascript;version=1.8">

  // Testing the presence of the chrome-only API
  ok(!document.insertAnonymousContent,
    "Content document shouldn't have access to insertAnonymousContent");
  ok(!document.removeAnonymousContent,
    "Content document shouldn't have access to removeAnonymousContent");

  let chromeDocument = SpecialPowers.wrap(document);
  ok(chromeDocument.insertAnonymousContent,
    "Chrome document should have access to insertAnonymousContent");
  ok(chromeDocument.removeAnonymousContent,
    "Chrome document should have access to removeAnonymousContent");

  // Testing invalid inputs
  let invalidNodes = [null, undefined, false, 1, "string"];
  for (let node of invalidNodes) {
    let didThrow = false;
    try {
      chromeDocument.insertAnonymousContent(node);
    } catch (e) {
      didThrow = true;
    }
    ok(didThrow, "Passing an invalid node to insertAnonymousContent should throw");
  }

  // Testing the API of the returned object
  let div = document.createElement("div");
  div.textContent = "this is a test element";
  let anonymousContent = chromeDocument.insertAnonymousContent(div);
  ok(anonymousContent, "AnonymousContent object returned");

  let members = ["getTextContentForElement", "setTextContentForElement",
                 "getAttributeForElement", "setAttributeForElement",
                 "removeAttributeForElement", "getCanvasContext",
                 "setAnimationForElement"];
  for (let member of members) {
    ok(member in anonymousContent, "AnonymousContent object defines " + member);
  }
  chromeDocument.removeAnonymousContent(anonymousContent);
  </script>
</body>
</html>
